<template>
	<div class="wrapper">

		<!-- header部分 -->
		<header>
			<p>在线支付</p>
		</header>

		<!-- 订单信息部分 -->
		<h3>订单信息：</h3>
		<div class="order-info">
			<p>
				{{orders.business.businessName}}
				<i class="fa fa-caret-down" @click="detailetShow"></i>
			</p>
			<p>&#165;{{orders.orderTotal}}</p>
			<p v-if="redPacket!=0">-&#165;{{redPacket}}</p>
		</div>

		<!-- 订单明细部分 -->
		<ul class="order-detailet" v-show="isShowDetailet">
			<li v-for="item in orders.list">
				<p>{{item.food.foodName}} x {{item.quantity}}</p>
				<p>&#165;{{item.food.foodPrice*item.quantity}}</p>
			</li>
			<li>
				<p>配送费</p>
				<p>&#165;{{orders.business.deliveryPrice}}</p>
			</li>
		</ul>

		<!-- 支付方式部分 -->
		<ul class="payment-type">
			<li>
				<img src="../assets/alipay.png">
				<!--<i class="fa fa-check-circle"></i>-->
				<input type="radio" v-model="paymentType" value="2" style="width:6vw;height: 3.2vw;">
				<img src="../assets/wechat.png">
				<!--<i class="fa fa-check-circle"></i>-->
				<input type="radio" v-model="paymentType" value="1" style="width:6vw;height: 3.2vw;">
				<img src="../assets/wallet.png">
				<input type="radio" v-model="paymentType" value="0" style="width:3vw;height: 3.2vw;" />
			</li>
		</ul>
		<div class="modal-overlay">
			<div class="modal" @click.stop>
				<div class="modal-header">
					<h3>使用红包</h3>
				</div>
				<div class="modal-body">
					<select v-model="selectedOption">
						<option disabled value="">请选择一个选项</option>
						<option v-if="category==1||category==3||category==5||category==7" value="3">3元红包</option>
						<option v-if="categoty==2||category==3||category==6||category==7" value="5">5元红包</option>
						<option v-if="category==4||category==5||category==6||category==7" value="10">10元红包</option>
					</select>
				</div>
				<div class="modal-footer">
					<button @click="handleSubmit">提交</button>
				</div>
			</div>
		</div>
		<div class="payment-button">
			<button @click="pay">确认支付</button>
		</div>

		<!-- 底部菜单部分 -->
		<Footer></Footer>
	</div>
</template>

<script setup>
	import {
		ref,
		onMounted,
		onBeforeUnmount,
		getCurrentInstance
	} from 'vue';
	import Footer from '../components/Footer.vue';
	import {
		useRoute,
		useRouter
	} from 'vue-router';
	import axios from 'axios';
	import qs from 'qs';

	const route = useRoute();
	const router = useRouter();

	const orderId = ref(route.query.orderId);
	const orders = ref({
		business: {}
	});
	const selectedOption = ref(0);
	const isShowDetailet = ref(false);
	const paymentType = ref(0);
	const user = ref({});
	const {proxy}=getCurrentInstance();
	const category=ref(0);
	const redPacket=ref(0);

	onMounted(async() => {
		user.value = proxy.$getSessionStorage('user');
		axios.post('OrdersController/getOrdersById', qs.stringify({
			orderId: orderId.value
		})).then(response => {
			orders.value = response.data;
		}).catch(error => {
			console.error(error);
		});
		const response=await axios.get(`CreditController/getAvailableRedPacketCategory/${user.value.userId}`);
		category.value=response.data;
	});

	onMounted(() => {
		// 这里的代码是实现：一旦路由到在线支付组件，就不能回到订单确认组件。
		// 先将当前url添加到history对象中
		history.pushState(null, null, document.URL);
		// popstate事件能够监听history对象的变化
		window.onpopstate = () => {
			router.push({
				path: '/index'
			});
		}
	});

	const handleSubmit = async() => {
		if (selectedOption.value) {
			redPacket.value=selectedOption.value;
			console.log(redPacket.value);
		} else {
			alert('请选择一个选项');
		}
	};
	
	onBeforeUnmount(() => {
		window.onpopstate = null;
	});

	const detailetShow = () => {
		isShowDetailet.value = !isShowDetailet.value;
	};

	const pay = async () => {
		if (paymentType.value == 0) {
			await axios.get(`WalletController/payByWallet/${orderId.value}/${redPacket.value}`).then(response => {
				if (response.data == 1) {
					if(redPacket.value!=0)
						axios.get(`CreditController/redPacketUse/${user.value.userId}/${redPacket.value}/${orderId.value}`);
					alert("支付成功");
				} else if (response.data==-1){
					alert("支付失败，钱包余额不足");
				}
			}).catch(error => {
				console.error(error);
			});
			axios.get('CreditController/earnCredit', {
				params: {
					userId:user.value.userId,
					channelId:0,
					eventId:orderId.value
				}
			});
			router.push({
				path: '/index'
			});
		} else {
			axios.post(`OrdersController/payOrders/${redPacket.value}`, qs.stringify({
				orderId: orderId.value,
				businessId: orders.value.businessId
			})).then(response => {
				if (response.data == orderId.value) {
					if(redPacket.value!=0)
						axios.get(`CreditController/redPacketUse/${user.value.userId}/${redPacket.value}/${orderId.value}`);
					alert("支付成功");
				} else {
					alert("支付失败，请勿重复支付");
				}
			}).catch(error => {
				console.error(error);
			});
			router.push({
				path: '/index'
			});
		}
	};
</script>

<style scoped>
	/****************** 总容器 ******************/
	.wrapper {
		width: 100%;
		height: 100%;
	}

	/****************** header部分 ******************/
	.wrapper header {
		width: 100%;
		height: 12vw;
		background-color: #0097FF;
		color: #fff;
		font-size: 4.8vw;

		position: fixed;
		left: 0;
		top: 0;
		z-index: 1000;

		display: flex;
		justify-content: center;
		align-items: center;
	}

	/****************** 订单信息部分 ******************/
	.wrapper h3 {
		margin-top: 12vw;
		box-sizing: border-box;
		padding: 4vw 4vw 0;

		font-size: 4vw;
		font-weight: 300;
		color: #999;
	}

	.wrapper .order-info {
		box-sizing: border-box;
		padding: 4vw;
		font-size: 4vw;
		color: #666;

		display: flex;
		justify-content: space-between;
		align-items: center;
	}

	.wrapper .order-info p:last-child {
		color: orangered;
	}

	/****************** 订单明细部分 ******************/
	.wrapper .order-detailet {
		width: 100%;
	}

	.wrapper .order-detailet li {
		width: 100%;
		box-sizing: border-box;
		padding: 1vw 4vw;

		display: flex;
		justify-content: space-between;
		align-items: center;
	}

	.wrapper .order-detailet li p {
		font-size: 3vw;
		color: #666;
	}

	/****************** 支付方式部分 ******************/
	.wrapper .payment-type {
		width: 100%;
	}

	.wrapper .payment-type li {
		width: 100%;
		box-sizing: border-box;
		padding: 4vw;

		display: flex;
		justify-content: space-between;
		align-items: center;
	}

	.wrapper .payment-type li img {
		width: 33vw;
		height: 8.9vw;
	}

	.wrapper .payment-type li .fa-check-circle {
		font-size: 5vw;
		color: #38CA73;
	}

	.wrapper .payment-button {
		width: 100%;
		box-sizing: border-box;
		padding: 4vw;
	}

	.wrapper .payment-button button {
		width: 100%;
		height: 10vw;
		border: none;
		/*去掉外轮廓线*/
		outline: none;
		border-radius: 4px;
		background-color: #38CA73;
		color: #fff;
	}
</style>